import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler


def minmax_demo():
    """
    归一化
    :return:
    """
    # 1. 获取数据
    data = pd.read_csv('data/dating.txt')
    """
    第一个:表示选择所有行
    :3表示选择前3列（从第0列到第2列，不包括第3列）
    """
    data = data.iloc[:, :3]
    print(f"原始数据集：\n{data}")

    # 2. 实例化一个转换器类
    """
    Scikit-learn的MinMaxScaler工作原理
    1. fit()阶段：
    计算并存储每列的最小值和最大值
    存储为transform.min_和transform.scale_(即max-min)
    2. transform()阶段：
    应用归一化公式转换数据
    可以指定不同的范围（默认[0,1]）
    3. fit_transform()：
    合并了fit和transform两个步骤
    """
    transform = MinMaxScaler()

    # 3. 调用fit_transform
    data_new = transform.fit_transform(data)
    print(f"归一化后的数据集：\n{data_new}")


def standard_demo():
    """
    标准化
    :return:
    """
    # 1. 获取数据
    data = pd.read_csv('data/dating.txt')
    """
    第一个:表示选择所有行
    :3表示选择前3列（从第0列到第2列，不包括第3列）
    """
    data = data.iloc[:, :3]
    print(f"原始数据集：\n{data}")

    # 2. 实例化一个转换器类
    transform = StandardScaler()

    # 3. 调用fit_transform
    data_new = transform.fit_transform(data)
    print(f"标准化后的数据集：\n{data_new}")


if __name__ == '__main__':
    # minmax_demo()
    standard_demo()
